﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows.Forms;
using GSQ.BusinessEntities;
using GSQ.BusinessLogic;
using GSQ.Rpt_s;
using UIapp.Interfaces;

namespace UIapp.Vistas
{
    public partial class frmProductosMovimientos : Plantillas.frmViewPlantilla, UIapp.Interfaces.IPantalla
    {
        public frmProductosMovimientos()
        {
            InitializeComponent();
            this.entityCollection = new List<PRODUCTOS_MOVIMIENTOS>();
            this.dtpHasta.Value = this.dtpDesde.Value = DateTime.Now;
            this.verEnPantallaToolStripMenuItem.Image = new System.Drawing.Bitmap(Comun.systemConfig.RUTA_IMAGENES + "printDisplay.png");
            this.reImprimirToolStripMenuItem.Image = new System.Drawing.Bitmap(Comun.systemConfig.RUTA_IMAGENES + "printer.png");
            this.dtpDesde.Value = DateTime.Now;
            this.dtpHasta.Value = DateTime.Now;
        }

        #region Variables
        List<PRODUCTOS_MOVIMIENTOS> entityCollection;
        #endregion

        #region Implementacion IPantalla
        public int ComandosSoportados
        {
            get
            {
                return (int)ComandosPantalla.Buscar;
            }
        }

        public void Nuevo()
        {
            throw new NotImplementedException();
        }

        public void Modificar()
        {
            throw new NotImplementedException();
        }

        public void Eliminar()
        {
            throw new NotImplementedException();
        }

        public void Refrescar()
        {
            this.Buscar();
        }

        public void Buscar()
        {
            if (this.dtpDesde.Value > this.dtpHasta.Value)
            {
                Comun.ShowInMainMessage("Rango de fecha no valido.");
                return;
            }

            if (this.txtSearchValue.Text.Trim() == String.Empty)
            {
                Comun.ShowInMainMessage("Debe especificar un codigo de producto.");
                return;
            }
            this.backgroundWorker.RunWorkerAsync();
            Comun.ShowLoadingFRM();
        }

        public void AgregarProducto(Controles.TransferEntity tranferEntity)
        {
            throw new NotImplementedException();
        }
        #endregion

        #region Tratamiento de eventos
        private void txtBuscar_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                this.Buscar();
                e.Handled = true;
            }
        }

        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            this.Listar();
        }

        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            Comun.CloseLoadingFRM();
            if (e.Error != null)
                Comun.ShowMessage(e.Error);
            else
            {
                this.bindingSource.DataSource = this.entityCollection.ToList();
                if (entityCollection.Count > 0)
                {
                    this.lblCodigo.Text = this.entityCollection.FirstOrDefault().CODIGO;
                    this.lblNroOriginal.Text = this.entityCollection.FirstOrDefault().NRO_ORIGINAL;
                    this.lblDescripcion.Text = this.entityCollection.FirstOrDefault().DESCRIPCION;
                    this.lblCompradas.Text = this.entityCollection.Where(a => a.TIPO_MOVIMIENTO == "COMPRA" && a.ACTIVO).Sum(a => a.CANTIDAD).ToString("N2");
                    this.lblAjustadas.Text = this.entityCollection.Where(a => a.TIPO_MOVIMIENTO == "AJUSTE" && a.ACTIVO).Sum(a => a.CANTIDAD).ToString("N2");
                    this.lblVendidas.Text = this.entityCollection.Where(a => a.TIPO_MOVIMIENTO == "FACTURA" && a.ACTIVO).Sum(a => a.CANTIDAD).ToString("N2");
                }
                else
                {
                    this.lblAjustadas.Text = this.lblVendidas.Text = this.lblCompradas.Text = "0.00";
                    this.lblDescripcion.Text = this.lblNroOriginal.Text = this.lblCodigo.Text = string.Empty;
                }
            }
        }

        private void txtSearchValue_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F9)
            {
                if (this.txtSearchValue.Text.Trim() == string.Empty)
                {
                    Vistas.frmProductos frm = new Vistas.frmProductos(false);
                    //   frm.txtSearchValue.Text = value.Trim();
                    //if (this.COSTO_PRECIO == CostoPrecio.Costo)
                    //  //  frm.HideCosto = true;
                    //else
                    //    frm.HidePrecio = true;
                    if (frm.ShowDialog(this) == DialogResult.OK)
                    {
                        this.txtSearchValue.Text = frm.SelectedProducto.CODIGO;

                    }
                }
            }
        }

        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            if (this.entityCollection.Count < 1)
                e.Cancel = true;
        }

        private void verEnPantallaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Plantillas.frmReportPreview frm = new Plantillas.frmReportPreview();
            switch (((PRODUCTOS_MOVIMIENTOS)this.radGridView.CurrentRow.DataBoundItem).TIPO_MOVIMIENTO)
            {
                case "COMPRA":
                    frm.crystalReportViewer1.ReportSource = new Reportes().GetCompra(((PRODUCTOS_MOVIMIENTOS)this.radGridView.CurrentRow.DataBoundItem).ID);
                    break;
                case "AJUSTE":
                    frm.crystalReportViewer1.ReportSource = new Reportes().GetAjusteInvetario(((PRODUCTOS_MOVIMIENTOS)this.radGridView.CurrentRow.DataBoundItem).ID);
                    break;
                case "FACTURA":
                    frm.crystalReportViewer1.ReportSource = new Reportes().GetFacturaCarta(((PRODUCTOS_MOVIMIENTOS)this.radGridView.CurrentRow.DataBoundItem).ID, false);
                    break;
            }
            frm.Show();
        }

        private void reImprimirToolStripMenuItem_Click(object sender, EventArgs e)
        {

            switch (((PRODUCTOS_MOVIMIENTOS)this.radGridView.CurrentRow.DataBoundItem).TIPO_MOVIMIENTO)
            {
                case "COMPRA":
                    Plantillas.frmReportPreview frm = new Plantillas.frmReportPreview();
                    frm.crystalReportViewer1.ReportSource = new Reportes().GetCompra(((PRODUCTOS_MOVIMIENTOS)this.radGridView.CurrentRow.DataBoundItem).ID);
                    frm.Show();
                    break;
                case "AJUSTE":
                    Plantillas.frmReportPreview frm1 = new Plantillas.frmReportPreview();
                    frm1.crystalReportViewer1.ReportSource = new Reportes().GetAjusteInvetario(((PRODUCTOS_MOVIMIENTOS)this.radGridView.CurrentRow.DataBoundItem).ID);
                    frm1.Show();
                    break;
                case "FACTURA":
                    new Reportes().PrintFacturaCarta(((PRODUCTOS_MOVIMIENTOS)this.radGridView.CurrentRow.DataBoundItem).ID, false);
                    break;
            }

        }
        #endregion

        #region Metodos auxiliares
        public void Listar()
        {
            this.entityCollection.Clear();
            this.entityCollection = new ProductosBL().GetByFechasCodigo(this.dtpDesde.Value.Date, this.dtpHasta.Value.Date, this.txtSearchValue.Text.Trim());

        }
        #endregion
    }
}
